package com.heima.article.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.heima.model.article.dtos.ArticleDto;
import com.heima.model.article.dtos.ArticleHomeDto;
import com.heima.model.article.pojos.ApArticle;
import com.heima.model.article.pojos.UpdateArticleInfo;
import com.heima.model.behavior.dtos.LoadArticleBehaviorDTO;
import com.heima.model.common.dtos.PageResponseResult;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.wemedia.dtos.StatisticsDto;
import com.heima.model.wemedia.dtos.WmCommentPageReqDTO;
import com.heima.model.wemedia.dtos.WmCommentLikeDTO;
import com.heima.model.wemedia.dtos.WmCommentListPageReqDTO;
import com.heima.model.wemedia.dtos.WmCommentUpdateStatusDTO;

import java.time.LocalDateTime;

/**
 * @author 陈辉
 * @data 2023 15:41
 */
public interface ApArticleService extends IService<ApArticle> {
    /**
     * app文章首页加载/加载更多/加载更新
     *
     * @param dto
     * @param loadtypeLoadMore
     * @return
     */
    ResponseResult load(ArticleHomeDto dto, Short loadtypeLoadMore);

    /**
     * 保存或修改app文章信息
     *
     * @param dto
     * @return
     */
    ResponseResult saveOrUpdateArticle(ArticleDto dto);

    /**
     * 加载文章行为
     *
     * @param loadArticleBehaviorDTO
     * @return
     */
    ResponseResult loadArticleBehavior(LoadArticleBehaviorDTO loadArticleBehaviorDTO);


    /**
     * 更新文章评论状态
     *
     * @param wmCommentUpdateStatusDTO
     * @return
     */
    ResponseResult updateCommentStatus(WmCommentUpdateStatusDTO wmCommentUpdateStatusDTO);

    /**
     * 查看评论列表
     *
     * @param wmCommentListPageReqDTO
     * @return
     */
    ResponseResult commentList(WmCommentListPageReqDTO wmCommentListPageReqDTO);

    /**
     * 自媒体端评论点赞
     *
     * @param wmCommentLikeDTO
     * @param authorId
     * @return
     */
    ResponseResult commentLike(WmCommentLikeDTO wmCommentLikeDTO, Integer authorId);

    /**
     * 更新文章信息
     *
     * @param articleInfo
     */
    void updateArticleInfo(UpdateArticleInfo articleInfo);

    /**
     * 根据用户id获取文章信息
     *
     * @param statisticsDto
     * @return
     */
    PageResponseResult newPage(StatisticsDto statisticsDto);


    /**
     * 文章评论数量+1
     *
     * @param entryId
     */
    void addOneComment(Long entryId);

    /**
     * 删除指定数量的评论
     *
     * @param num
     * @param articleId
     */
    void deleteCommentNum(Integer num, Long articleId);

    /**
     * 通过文章id获取文章信息
     *
     * @param articleId
     * @return
     */
    ApArticle findByArticleId(Long articleId);

    /**
     * 根据时间范围统计点赞数量和收藏数量
     *
     * @param
     * @param
     * @param
     * @param beginDateTime
     * @param endDateTime1
     * @return
     */
    ResponseResult queryLikesAndConllections(Integer authorId, LocalDateTime beginDateTime, LocalDateTime endDateTime1);

}
